package com.itheima.reggie.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.reggie.common.UserHolder;
import com.itheima.reggie.domain.Cart;
import com.itheima.reggie.mapper.CartMapper;
import com.itheima.reggie.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;


// 购物车
@Service
@Transactional
public class CartServiceImpl implements CartService {

    @Autowired
    private CartMapper cartMapper;



    // 添加购物车的方法
    @Override
    public Cart add(Cart cartparam) {
        //  构建条件
        //在购物车的一条数据中 菜品id跟 套餐的id是不能共存的 要不就是菜品 要不就是套餐
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        qw.eq(Cart::getUserId, UserHolder.get().getId());  // 先对比ID  UserHolder.get().getId() 就是获取登录的id
        qw.eq(cartparam.getDishId()!=null,Cart::getDishId,cartparam.getDishId());// 对比的菜品的id
        qw.eq(cartparam.getSetmealId()!=null,Cart::getSetmealId,cartparam.getSetmealId());// 对比套餐id
        // 先判断前端传过来的这个购物车数据是否为空 再去拿数据库的 字段去对比
        Cart cart = cartMapper.selectOne(qw);

        // 再去判断 这条购物车数据   Cart cart = cartMapper.selectOne(qw);
        if (cart==null){ //如果没有这条数据  就添加一个购物车
            // 补全信息  根据前端请求体中的数据 我们补全了以下几个条件
            cart=cartparam;
            cart.setUserId(UserHolder.get().getId()); //id
            cart.setNumber(1);// 数量
            cart.setCreateTime(new Date()); //创建时间
            cartMapper.insert(cart); //新增
        }else {
            cart.setNumber(cart.getNumber()+1); //数量上加1
            cartMapper.updateById(cart);
        }
        return cart;
    }
     //查看购物车
    @Override
    public List<Cart> findCart() {
        // 构建条件
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        qw.eq(Cart::getUserId,UserHolder.get().getId());
        // 返回结果
        return cartMapper.selectList(qw);

    }
    // 修改购物车
    @Override
    public Cart update(Cart cart1) {
        //  构建条件
        //在购物车的一条数据中 菜品id跟 套餐的id是不能共存的 要不就是菜品 要不就是套餐
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        qw.eq(Cart::getUserId, UserHolder.get().getId());  // 先对比ID  UserHolder.get().getId() 就是获取登录的id
        qw.eq(cart1.getDishId()!=null,Cart::getDishId,cart1.getDishId());// 对比的菜品的id
        qw.eq(cart1.getSetmealId()!=null,Cart::getSetmealId,cart1.getSetmealId());// 对比套餐id
        // 先判断前端传过来的这个购物车数据是否为空 再去拿数据库的 字段去对比
        Cart cart = cartMapper.selectOne(qw);
        cart.setNumber(cart.getNumber()-1); //数量上加1
       if (cart.getNumber()==0){
           cartMapper.delete(qw);
       }else {
           cartMapper.updateById(cart);
       }

        return cart;
    }
    //删除
    @Override
    public void delete() {
        LambdaQueryWrapper<Cart> qw = new LambdaQueryWrapper<>();
        qw.eq(Cart::getUserId,UserHolder.get().getId());
        cartMapper.delete(qw);
    }


}
